home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-01-03 | 15.2 KB | 1,062 lines |
-
-
- brightanim:
-
- move.l branimpt,a0
- move.w (a0),d0
- ; move.w d0,ZoneDat24+6
- sub.w #10,d0
- asr.w #1,d0
- add.w #10,d0
- ; move.w d0,ZoneDat23+6
- ; move.w d0,ZoneDat23+6
-
- sub.w #1,branimcount
- bgt.s nonextbr
- adda.w #4,a0
- cmp.l #endbranim,a0
- blt.s notrestartbr
- move.l #branim,a0
- notrestartbr
- move.l a0,branimpt
- move.w 2(a0),branimcount
- nonextbr:
-
- rts
-
- branimpt: dc.l branim
- branimcount: dc.w 0
-
- branim:
- dc.w 10,1
- dc.w -15,1
- dc.w 10,3
- dc.w -15,1
- dc.w 10,4
- dc.w -15,1
- dc.w 10,1
- dc.w -15,2
- dc.w 10,2
- dc.w -8,1
- dc.w 10,1
- dc.w -5,1
- dc.w 10,2
- dc.w -15,1
- dc.w 10,2
-
- endbranim
-
- objvels: ds.l 8
-
- Robotanimpos:
- dc.w 0
- Robotarmpos
- dc.w 0
- clump: dc.w 0
-
- RobotWalk:
- move.l #RobotPts+2,a0
- move.l #Robotanim,a1
- move.w Robotanimpos(pc),d0
-
- clr.b clump
- adda.w d0,a1
-
- move.w #(38*3)-1,d0
- putinpts:
- move.w (a1)+,(a0)+
- dbra d0,putinpts
-
-
- move.l #RightArm,a0
- move.l #Armanim,a1
- move.w Robotarmpos(pc),d0
- adda.w d0,a1
- move.w #(14*3)-1,d0
- putinpts2:
- move.w (a1)+,(a0)+
- dbra d0,putinpts2
-
- move.l #Robot_MainBody,a0
- move.l #BodyPlace+2,a1
- move.w (a0)+,d0
- move.w RobotPts+4+14*6,d1
- add.w RobotPts+4+22*6,d1
- asr.w #1,d1
-
- putinheights:
- move.w (a0)+,d2
- add.w d1,d2
- move.w d2,(a1)
- addq #6,a1
- dbra d0,putinheights
-
- move.w visxpos,d0
- add.w visxdir,d0
- cmp.w #24,d0
- blt.s okvisr
- move.w #-4,visxdir
- okvisr
- cmp.w #-24,d0
- bgt.s okvisl
- move.w #4,visxdir
- okvisl:
- move.w d0,visxpos
-
- move.l #VISOR,a0
- add.w #64,d0
- move.b d0,6(a0)
- move.b d0,18(a0)
- move.b d0,22(a0)
- add.b #63,d0
- move.b d0,10(a0)
- move.b d0,14(a0)
-
- rts
-
- visxpos: dc.w 0
- visxdir: dc.w 4
-
- FramesToDraw: dc.w 0
- TempFrames: dc.w 0
-
- objmoveanim:
-
- move.l PLR1_Roompt,a0
- move.w (a0),PLR1_Zone
- move.l PLR2_Roompt,a0
- move.w (a0),PLR2_Zone
-
- bsr DoorRoutine
- bsr LiftRoutine
- bsr ObjectHandler
- bsr PlayerShot
- bsr RobotWalk
-
- subq.w #1,animtimer
- bgt.s notzero
- move.w #2,animtimer
- move.l otherrip,d0
- move.l RipTear,otherrip
- move.l d0,RipTear
- notzero:
-
- rts
-
- ******************************
-
- tstdir: dc.w 0
- liftheighttab: ds.w 20
- doorheighttab: ds.w 20
-
- LiftRoutine:
-
- move.l #LiftData,a0
- move.l #liftheighttab,a6
- doalift:
-
- move.w (a0)+,d0 ; bottom of lift movement
- cmp.w #999,d0
- bne notallliftsdone
- rts
- notallliftsdone:
- move.w (a0)+,d1 ; top of lift movement.
-
- move.w (a6)+,d3
- move.w 2(a0),d2
- move.w d3,(a0)+
- move.l a0,a5
- move.w d2,(a0)+
-
- move.l (a0)+,a1
- asr.w #2,d3
- move.w d3,d0
- asl.w #2,d0
- move.w d0,2(a1)
- move.w d3,d0
- muls #256,d3
- move.l (a0)+,a1
- move.w -2(a1),d5
- move.l PLR1_Roompt,a3
- move.l d3,(a1)
- and.w #63,d0
- neg.w d0
- add.w #64,d0
-
- cmp.w (a3),d5
- bne.s .notstoodonlift
-
- move.b (a0)+,d1 ; events
- move.b (a0)+,d2 ; conditions
- and.b Conditions,d2
- cmp.b -1(a0),d2
- bra.s .dothesimplething
-
- move.w d7,(a5)
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #5,Samplenum
- move.b #1,chanpick
- st notifplaying
- movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
-
- bra.s .dothesimplething
-
- .notstoodonlift:
-
- move.b (a0)+,d1 ; events
- move.b (a0)+,d2 ; conditions
- and.b Conditions,d2
-
- cmp.b -1(a0),d2
- beq.s .satisfied
-
- .dothesimplething:
- move.l #FloorLines,a3
- .simplecheck:
- move.w (a0)+,d5
- blt nomoreliftwalls
- asl.w #5,d5
- lea (a3,d5.w),a4
- move.w #0,30(a4)
- move.l (a0)+,a1
- move.l (a0)+,a2
- adda.w d0,a2
- move.l a2,10(a1)
- move.l d3,20(a1)
- move.l d3,16(a4)
- bra.s .simplecheck
- bra nomoreliftwalls
-
- .satisfied:
-
- move.l #FloorLines,a3
-
- liftwalls:
- move.w (a0)+,d5
- blt nomoreliftwalls
-
- asl.w #5,d5
- lea (a3,d5.w),a4
- move.b 30(a4),d4
- move.w #0,30(a4)
- and.b d1,d4
- beq.s .nothinghit
- move.w d7,(a5)
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #5,Samplenum
- move.b #1,chanpick
- st notifplaying
- movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
- .nothinghit:
- move.l (a0)+,a1
- move.l (a0)+,a2
- adda.w d0,a2
- move.l a2,10(a1)
- move.l d3,20(a1)
- move.l d3,16(a4)
- bra liftwalls
-
- nomoreliftwalls
- bra doalift
-
- rts
-
- animtimer: dc.w 2
-
-
- doordir: dc.w -1
- doorpos: dc.w -9
-
- DoorRoutine:
-
- move.l #doorheighttab,a6
- move.l #DoorData,a0
-
- doadoor:
-
- move.w (a0)+,d0 ; bottom of door movement
- cmp.w #999,d0
- bne notalldoorsdone
- rts
- notalldoorsdone:
- move.w (a0)+,d1 ; top of door movement.
-
- move.w (a6)+,d3
-
- move.w d3,(a0)+
- move.l a0,a5
- move.w d2,(a0)+
-
- move.l (a0)+,a1
- asr.w #2,d3
- move.w d3,d0
- asl.w #2,d0
- move.w d0,2(a1)
- move.w d3,d0
- muls #256,d3
- move.l (a0)+,a1
- move.l d3,(a1)
- and.w #63,d0
- neg.w d0
- add.w #64,d0
-
- move.b (a0)+,d1 ; events
- move.b (a0)+,d2 ; conditions
- and.b Conditions,d2
-
- dothesimplething:
- move.l #FloorLines,a3
- simplecheck:
- move.w (a0)+,d5
- blt nomoredoorwalls
- asl.w #5,d5
- lea (a3,d5.w),a4
- move.w #0,30(a4)
- move.l (a0)+,a1
- move.l (a0)+,a2
- adda.w d0,a2
- move.l a2,10(a1)
- move.l d3,24(a1)
- move.l d3,20(a4)
- bra.s simplecheck
- bra nomoredoorwalls
-
- alreadygoingup:
- move.w (a0)+,d1
- bra dothesimplething
-
- satisfied:
-
- move.l #FloorLines,a3
-
- doorwalls:
- move.w (a0)+,d5
- blt.s nomoredoorwalls
- asl.w #5,d5
- lea (a3,d5.w),a4
- move.b 30(a4),d4
- move.w #0,30(a4)
- and.b d1,d4
- beq.s nothinghit
- move.w #-16,(a5)
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #5,Samplenum
- move.b #1,chanpick
- st notifplaying
- movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
- nothinghit:
- move.l (a0)+,a1
- move.l (a0)+,a2
- adda.w d0,a2
- move.l a2,10(a1)
- move.l d3,24(a1)
- move.l d3,20(a4)
- bra.s doorwalls
-
- nomoredoorwalls
- bra doadoor
-
- rts
-
- tempGotBigGun: dc.w 0
- tempGunDamage: dc.w 0
- tempGunNoise: dc.w 1
- tempxoff: dc.w 0
- tempzoff: dc.w 0
- tempRoompt: dc.l 0
-
- PLR1_GotBigGun: dc.w 0
- PLR1_GunDamage: dc.w 0
- PLR1_GunNoise: dc.w 0
- PLR2_GotBigGun: dc.w 0
- PLR2_GunDamage: dc.w 0
- PLR2_GunNoise: dc.w 0
- bulyspd: dc.w 0
- closedist: dc.w 0
-
- ObsInLine:
- ds.b 400
-
- rotcount:
- dc.w 0
-
- shotvels: ds.l 20
-
- PLR1_clicked: dc.b 0
- PLR2_clicked: dc.b 0
- popping: ds.l 5*4
- targetydiff: dc.l 0
-
- PlayerShot:
-
- tst.b PLR1_clicked
- beq PLR1_nofire
-
- move.w PLR1_angpos,d0
- move.l #SineTable,a0
- lea (a0,d0.w),a0
- move.w (a0),tempxdir
- move.w 2048(a0),tempzdir
- move.w PLR1_xoff,tempxoff
- move.w PLR1_zoff,tempzoff
- move.w PLR1_GunNoise,tempGunNoise
- move.w PLR1_GotBigGun,tempGotBigGun
- move.w PLR1_GunDamage,tempGunDamage
- move.l PLR1_Roompt,tempRoompt
- move.l #%10000001,d7
- move.w #-1,d0
- move.l #0,targetydiff
- move.w #32767,d1
-
- move.l #ObsInLine,a1
- move.l #ObjectData,a0
- move.l #ObjRotated,a2
- findclosestinline
- tst.w (a0)
- blt.s outofline
- tst.b (a1)+
- beq.s notlinedup
- tst.b 17(a0)
- beq.s notlinedup
- move.b 16(a0),d6
- btst d6,d7
- beq.s notlinedup
- move.w (a0),d5
- move.w 2(a2,d5.w*8),d6
- cmp.w d6,d1
- blt.s notlinedup
- move.w d6,d1
-
- ; We have a closer enemy lined up.
- move.w 4(a0),d6
- ext.l d6
- asl.l #7,d6
- sub.l PLR1_yoff,d6
- move.l d6,targetydiff
- move.w d5,d0
-
- notlinedup:
- add.w #64,a0
- bra findclosestinline
-
- outofline:
-
- move.w #0,bulyspd
- tst.w d0
- blt.s nothingtoshoot
- move.l targetydiff,d7
- sub.l #playerheight,d7
- add.l #22*256,d7
- move.w d1,closedist
- asr.w #4,d1
- tst.w d1
- bgt.s okdistthing
- moveq #1,d1
- okdistthing
- divs d1,d7
- move.w d7,bulyspd
-
- nothingtoshoot:
-
- bsr pressedfire
- PLR1_nofire:
-
- tst.b PLR2_clicked
- beq.s PLR2_nofire
-
- move.w PLR2_angpos,d0
- move.l #SineTable,a0
- lea (a0,d0.w),a0
- move.w (a0),tempxdir
- move.w 2048(a0),tempzdir
- move.w PLR2_xoff,tempxoff
- move.w PLR2_zoff,tempzoff
- move.w PLR2_GunNoise,tempGunNoise
- move.w PLR2_GotBigGun,tempGotBigGun
- move.w PLR2_GunDamage,tempGunDamage
- move.l PLR2_Roompt,tempRoompt
- bsr pressedfire
- PLR2_nofire:
-
- rts
-
- tempangpos: dc.w 0
- tempxdir: dc.w 0
- tempzdir: dc.w 0
-
- pressedfire:
-
- move.w #0,d7
- move.w #256,d6
- move.w #256,d5
-
- firefive:
-
- move.l #PlayerShotData,a0
- move.w #19,d1
- .findonefree
- move.w 12(a0),d0
- blt.s .foundonefree
- adda.w #64,a0
- dbra d1,.findonefree
-
- rts
-
- .foundonefree:
-
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w tempGunNoise,Samplenum
- move.b #2,chanpick
- clr.b notifplaying
- move.b tempGotBigGun,shotsize(a0)
- move.b tempGunDamage,shotpower(a0)
- movem.l a0/d5/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/d5/d6/d7
-
- move.l #ObjectPoints,a1
- move.w (a0),d1
- lea (a1,d1.w*8),a1
- move.w tempxoff,(a1)
- move.w tempzoff,4(a1)
- move.w tempxdir,d0
- ext.l d0
- asl.l #4,d0
- move.l d0,shotxvel(a0)
- move.w tempzdir,d0
- ext.l d0
- asl.l #4,d0
- move.l d0,shotzvel(a0)
- move.w bulyspd,shotyvel(a0)
- move.l #%10000001,EnemyFlags(a0)
- move.l tempRoompt,a2
- move.w (a2),12(a0)
- move.l 2(a2),d0
- sub.l #playerheight,d0
- add.l #22*128,d0
- move.l d0,accypos(a0)
- asr.l #7,d0
- move.w d0,4(a0)
-
- add.w d6,tempangpos
- neg.w d6
- neg.w d5
- add.w d5,d6
-
- dbra d7,firefive
-
- rts
-
- duh: dc.w 0
- double: dc.w 0
- ivescreamed: dc.w 0
-
- ObjectHandler:
-
- move.l #ObjectData,a0
- Objectloop:
- tst.w (a0)
- blt.s doneallobj
-
- cmp.b #0,16(a0)
- bne.s notnasty
- bsr ItsANasty
- notnasty:
- cmp.b #1,16(a0)
- bne.s notmedi
- bsr ItsAMediKit
- notmedi:
- cmp.b #2,16(a0)
- bne.s notbullet
- bsr ItsABullet
- notbullet:
- cmp.b #3,16(a0)
- bne.s notbiggun
- bsr ItsABigGun
- notbiggun:
- cmp.b #4,16(a0)
- bne.s notkey
- bsr ItsAKey
- notkey:
- cmp.b #8,16(a0)
- bne.s notmarine
- bsr ItsAMarine
- notmarine:
- cmp.b #6,16(a0)
- bne.s notRobot
- bsr ItsARobot
- notRobot:
- cmp.b #7,16(a0)
- bne.s notBigNasty
- bsr ItsABigNasty
- notBigNasty:
-
- adda.w #64,a0
- bra Objectloop
-
- doneallobj:
- rts
-
- include "ab3:source/AI.s"
-
- ItsAMarine:
-
- move.w #15,Aggression
- move.w #0,Movement
- move.w #30,Cooperation
- move.b #0,Ident
- move.l #%1,enemies
- move.l #%10100000,friends
- st Armed
- bsr AIControl
-
- move.l objroom,a2
- move.w 10(a2),2(a0)
- move.l 2(a2),d0
- sub.l #6400,d0
- asr.l #7,d0
- move.w d0,4(a0)
-
- move.w #20*256,8(a0)
-
- rts
-
- ItsARobot:
- ; Head towards a control point, and
- ; once there, pick another one at
- ; random and go all the way there
- ; instead.
-
- tst.w 12(a0)
- blt .thisonedead
-
- tst.b clump
- beq.s .nosound
-
- movem.l d0-d7/a0-a6,-(a7)
-
- move.w (a0),d0
- move.l #ObjRotated,a1
- move.l (a1,d0.w*8),Noisex
- move.w #400,Noisevol
- move.w #7,Samplenum
- move.b #1,chanpick
- clr.b notifplaying
- jsr MakeSomeNoise
- movem.l (a7)+,d0-d7/a0-a6
-
- .nosound:
-
-
- move.w 12(a0),d2
- move.l #ZoneAdds,a5
- move.l (a5,d2.w*4),objroom
-
- move.w CurrCPt(a0),d0
- move.w TargCPt(a0),d1
-
- jsr GetNextCPt
-
- ; d0 contains nearest CPt to go for.
-
- move.l #CPtPos,a5
- move.w (a5,d0.w*4),newx
- move.w 2(a5,d0.w*4),newz
-
- move.w (a0),d1
- move.l #ObjectPoints,a1
- lea (a1,d1.w*8),a1
- move.w (a1),oldx
- move.w 4(a1),oldz
-
- move.w maxspd(a0),d2
- muls TempFrames,d2
- move.w d2,speed
- move.w #20,Range
-
- movem.l d0/a0/a1/a3/a4/d7,-(a7)
- clr.b canshove
- jsr HeadTowardsAng
-
- move.w #%1000000000,wallflags
- Jsr MoveObject
- movem.l (a7)+,d0/a0/a1/a3/a4/d7
-
- and.w #8191,Facing(a0)
-
- move.w CosRet,d1
- move.w SinRet,d2
- move.w Facing(a0),d3
- move.l #SineTable,a2
- move.w 120(a2),d6
- swap d6
- clr.w d6
- asr.l #1,d6
- lea (a2,d3.w),a2
- move.w (a2),d4 ; sin
- move.w 2048(a2),d5 ; cos
- muls d2,d5
- muls d1,d4
-
- moveq #0,d3
-
- sub.l d5,d4
- blt.s .turnrighty
- .turnlefty:
-
- cmp.l d4,d6
- bgt.s .doneturn
-
- move.w #-120,d3
-
- bra.s .doneturn
- .turnrighty:
-
- neg.l d4
- cmp.l d4,d6
- bgt.s .doneturn
-
- move.w #120,d3
-
- .doneturn:
-
- move.w #4,maxspd(a0)
-
- muls 2048(a2),d1
- muls (a2),d2
- add.l d2,d1
- cmp.l #$20000000,d1
- bgt.s .canwalk
- move.w #0,maxspd(a0)
-
- add.w d3,d3
- bne.s .canwalk
- move.w #240,d3
-
- .canwalk:
-
- add.w Facing(a0),d3
-
- and.w #8191,d3
-
- move.w d3,Facing(a0)
-
- move.l objroom,a2
- move.w (a2),12(a0)
-
- move.w newx,(a1)
- move.w newz,4(a1)
-
- tst.b GotThere
- beq.s .notatnextptyet
-
- move.w d0,CurrCPt(a0)
- cmp.w TargCPt(a0),d0
- bne.s .notatnextptyet
-
- move.w nextCPt,d0
- move.w d0,TargCPt(a0)
- add.w #7,d0
- cmp.w NumCPts,d0
- blt.s .stillsomemore
- sub.w NumCPts,d0
- .stillsomemore:
- move.w d0,nextCPt
-
- .notatnextptyet:
-
- move.w 10(a2),2(a0)
- move.l 2(a2),d0
- add.l #128*24,d0
- asr.l #7,d0
- move.w d0,targheight(a0)
-
- move.w 4(a0),d1
-
- cmp.w d0,d1
- beq.s .okh
- ble.s .godown
- subq #8,d1
- .godown
- addq #4,d1
- move.w d1,4(a0)
- .okh:
-
- .thisonedead:
- rts
-
- include "ab3:source/aliencontrol.demo"
-
- nextCPt: dc.w 0
-
- RipTear: dc.l 256*17*65536
- otherrip: dc.l 256*18*65536
-
- ItsAMediKit:
-
- HealFactor EQU 18
-
- move.w PLR1_xoff,oldx
- move.w PLR1_zoff,oldz
- move.w PLR1_Zone,d7
- cmp.w 12(a0),d7
- bne.s .NotSameZone
- move.w (a0),d0
- move.l #ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #50*50,d2
- bsr CheckHit
- tst.b hitwall
- beq.s .NotPickedUp
-
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #4,Samplenum
- move.b #2,chanpick
- clr.b notifplaying
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.w #-1,12(a0)
- move.w HealFactor(a0),d0
- add.w d0,Energy
-
- .NotPickedUp:
-
- .NotSameZone:
-
- rts
-
-
- ItsABigGun:
-
- move.w PLR1_xoff,oldx
- move.w PLR1_zoff,oldz
- move.w PLR1_Zone,d7
- cmp.w 12(a0),d7
- bne .NotSameZone
- move.w (a0),d0
- move.l #ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #50*50,d2
- bsr CheckHit
- tst.b hitwall
- beq.s .NotPickedUp
-
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #4,Samplenum
- move.b #2,chanpick
- clr.b notifplaying
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.l #Cheese,FacesPtr
- move.w #4,Cheese
- move.w #-1,FacesCounter
- move.b #5,PLR1_GunDamage
- st PLR1_GotBigGun
- move.w #1,PLR1_GunNoise
-
- move.w #-1,12(a0)
-
- .NotPickedUp:
-
- .NotSameZone:
-
- rts
-
- ItsAKey:
-
- move.w PLR1_xoff,oldx
- move.w PLR1_zoff,oldz
- move.w PLR1_Zone,d7
- cmp.w 12(a0),d7
- bne .NotSameZone
- move.w (a0),d0
- move.l #ObjectPoints,a1
- move.w (a1,d0.w*8),newx
- move.w 4(a1,d0.w*8),newz
- move.l #50*50,d2
- bsr CheckHit
- tst.b hitwall
- beq .NotPickedUp
-
- move.w #0,Noisex
- move.w #0,Noisez
- move.w #50,Noisevol
- move.w #4,Samplenum
- move.b #2,chanpick
- clr.b notifplaying
- movem.l a0/a1/d2/d6/d7,-(a7)
- jsr MakeSomeNoise
- movem.l (a7)+,a0/a1/d2/d6/d7
-
- move.w #-1,12(a0)
- move.b 17(a0),d0
- or.b d0,Conditions
-
- move.l #Panel+24*64,a1
- move.l #Panel+24*16+14,a2
-
- moveq #0,d1
- lsr.b #1,d0
- bcs.s .done
- addq #2,d1
- lsr.b #1,d0
- bcs.s .done
- addq #2,d1
- lsr.b #1,d0
- bcs.s .done
- addq #2,d1
- .done
-
- adda.w d1,a1
- adda.w d1,a2
-
- move.w #4,d0
- .planes:
- move.l a1,a3
- move.l a2,a4
- moveq #15,d1
- .lines
- move.w (a3),(a4)
- adda.w #24,a3
- adda.w #24,a4
- dbra d1,.lines
- add.l #80*24,a1
- add.l #80*24,a2
- dbra d0,.planes
-
-
- .NotPickedUp:
-
- .NotSameZone:
-
- rts
-
- Conditions: dc.w 0
-
- ItsABullet:
-
- tst.b shotsize(a0)
- beq.s ItsASmallBullet
- bra ItsABigBullet
-
- ItsASmallBullet
-
- move.w 12(a0),d0
- blt doneshot
-
- move.l #(256*11*65536)+32,8(a0)
- move.w #25*256+25,6(a0)
- doneshot:
- rts
-
- ItsABigBullet:
-
- move.w 12(a0),d0
- blt doneshot
-
- tst.b shotstatus(a0)
- beq.s notpopping
-
- move.l #256*7*65536,a1
- move.b #12,d0
- sub.b shotstatus(a0),d0
- btst #0,d0
- beq.s nobot
- adda.w #32,a1
- nobot:
- asr.b #1,d0
- ext.w d0
- asl.w #7,d0
- move.l a1,8(a0)
- add.w d0,8(a0)
- add.w #4*256+4,6(a0)
- sub.w #4,4(a0)
-
- sub.b #1,shotstatus(a0)
- bgt.s notdonepop
- move.w #-1,12(a0)
- clr.b shotstatus(a0)
- notdonepop:
-
- bra doneshot
-
- notpopping:
-
- move.w #25*256+25,6(a0)
-
- rts
-
- hithit: dc.l 0
-
-
- putinbackdrop:
-
- move.l a0,-(a7)
-
- move.w angpos,d5
- and.w #8191,d5
- muls #432,d5
- divs #8192,d5
- muls #38*2,d5
-
- CACHE_ON d1
-
- move.l frompt,a0
- adda.w #104*4,a0
- move.l #EndBackPicture,a3
- lea.l BackPicture,a1
- add.l d5,a1
- move.w #2,d4
- bra allbars
- cnop 0,32
- allbars:
- move.w #31,d3
- onebar:
- vertline:
- val SET 0
-
- REPT 19
- move.l (a1)+,d0
- move.w d0,val+104*4(a0)
- swap d0
- move.w d0,val(a0)
- val SET val+104*8
- ENDR
-
- cmp.l a3,a1
- blt.s notoffrightend
- move.l #BackPicture,a1
- notoffrightend:
-
- addq #4,a0
- dbra d3,onebar
- addq #4,a0
- dbra d4,allbars
-
- move.l (a7)+,a0
- rts
-